gtkwidget: Break early if non-gesture controllers handle the event
authorCarlos Garnacho <carlosg@gnome.org>
Sun, 11 Mar 2018 12:41:10 +0000 (13:41 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 5 Apr 2018 17:26:54 +0000 (19:26 +0200)
Non gesture controllers have no means to collaborate with other
controllers, thus should be considered standalone entities. It makes
no sense to propagate any further if scroll/key controllers handled
the event.

gtk/gtkwidget.c

index 8bb3b57c34e2b5411fa89a66f386ce1115ca2544..24a142e1e91241b73fb647b3177e34e0dc72ff17 100644 (file)
@@ -5229,6 +5229,13 @@ _gtk_widget_run_controllers (GtkWidget           *widget,
 
           if (controller_phase == phase)
             handled |= gtk_event_controller_handle_event (data->controller, event);
+
+          /* Non-gesture controllers are basically unique entities not meant
+           * to collaborate with anything else. Break early if any such event
+           * controller handled the event.
+           */
+          if (handled && !GTK_IS_GESTURE (data->controller))
+            break;
         }
 
       l = next;